// Copyright (c) 2025 Shenzhen Kaihong Digital Industry Development Co., Ltd.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use std::path::Path;

fn main() {
    let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
    let target = std::env::var("TARGET").unwrap();
    
    match target.as_str() {
        "x86_64-unknown-linux-gnu" => {
            println!("cargo::rerun-if-changed={}/build/librerun_tools_cpp.a", &manifest_dir);
            println!("cargo::rustc-link-search={}/build", &manifest_dir);
            println!("cargo::rustc-link-lib=rerun_tools_cpp");
            println!("cargo::rustc-link-lib=pcl_common");
            println!("cargo::rustc-link-lib=pcl_io");
            println!("cargo:rustc-flags=-l dylib=stdc++");
        },
        "aarch64-unknown-linux-musl" => {
            println!("cargo::rerun-if-changed={}/arm64-v8a-build/librerun_tools_cpp.a", &manifest_dir);
            println!("cargo::rustc-link-search={}/arm64-v8a-build", &manifest_dir);
            println!("cargo::rustc-link-search=/usr/local/lib");
            println!("cargo::rustc-link-search=/usr/lib/aarch64-linux-musl/lib");

            println!("cargo::rustc-link-lib=rerun_tools_cpp");
            println!("cargo::rustc-link-lib=pcl_common");
            println!("cargo::rustc-link-lib=pcl_io");
            println!("cargo::rustc-link-lib=pcl_io_ply");
            println!("cargo::rustc-link-lib=vtkChartsCore-8.2");
            println!("cargo::rustc-link-lib=vtkInfovisCore-8.2");
            println!("cargo::rustc-link-lib=vtkIOGeometry-8.2");
            println!("cargo::rustc-link-lib=vtkIOLegacy-8.2");
            println!("cargo::rustc-link-lib=vtkIOPLY-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingLOD-8.2");
            println!("cargo::rustc-link-lib=vtkViewsContext2D-8.2");
            println!("cargo::rustc-link-lib=vtkViewsCore-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingContextOpenGL2-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingOpenGL2-8.2");
            println!("cargo::rustc-link-lib=vtkInteractionWidgets-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersModeling-8.2");
            println!("cargo::rustc-link-lib=vtkInteractionStyle-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersExtraction-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersStatistics-8.2");
            println!("cargo::rustc-link-lib=vtkImagingFourier-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersHybrid-8.2");
            println!("cargo::rustc-link-lib=vtkImagingGeneral-8.2");
            println!("cargo::rustc-link-lib=vtkImagingSources-8.2");
            println!("cargo::rustc-link-lib=vtkImagingHybrid-8.2");
            println!("cargo::rustc-link-lib=vtkIOImage-8.2");
            println!("cargo::rustc-link-lib=vtkDICOMParser-8.2");
            println!("cargo::rustc-link-lib=vtkmetaio-8.2");
            println!("cargo::rustc-link-lib=vtkpng-8.2");
            println!("cargo::rustc-link-lib=vtktiff-8.2");
            println!("cargo::rustc-link-lib=vtkjpeg-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingAnnotation-8.2");
            println!("cargo::rustc-link-lib=vtkImagingColor-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingVolume-8.2");
            println!("cargo::rustc-link-lib=vtkIOXML-8.2");
            println!("cargo::rustc-link-lib=vtkIOXMLParser-8.2");
            println!("cargo::rustc-link-lib=vtkIOCore-8.2");
            println!("cargo::rustc-link-lib=vtkdoubleconversion-8.2");
            println!("cargo::rustc-link-lib=vtklz4-8.2");
            println!("cargo::rustc-link-lib=vtklzma-8.2");
            println!("cargo::rustc-link-lib=vtkexpat-8.2");
            println!("cargo::rustc-link-lib=vtkImagingCore-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingContext2D-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingFreeType-8.2");
            println!("cargo::rustc-link-lib=vtkfreetype-8.2");
            println!("cargo::rustc-link-lib=vtkRenderingCore-8.2");
            println!("cargo::rustc-link-lib=vtkCommonColor-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersGeometry-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersSources-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersGeneral-8.2");
            println!("cargo::rustc-link-lib=vtkCommonComputationalGeometry-8.2");
            println!("cargo::rustc-link-lib=vtkFiltersCore-8.2");
            println!("cargo::rustc-link-lib=vtkCommonExecutionModel-8.2");
            println!("cargo::rustc-link-lib=vtkCommonDataModel-8.2");
            println!("cargo::rustc-link-lib=vtkCommonTransforms-8.2");
            println!("cargo::rustc-link-lib=vtkCommonMisc-8.2");
            println!("cargo::rustc-link-lib=vtkCommonMath-8.2");
            println!("cargo::rustc-link-lib=vtkCommonSystem-8.2");
            println!("cargo::rustc-link-lib=vtkCommonCore-8.2");
            println!("cargo::rustc-link-lib=vtksys-8.2");
            println!("cargo::rustc-link-lib=X11");
            println!("cargo::rustc-link-lib=X11-xcb");
            println!("cargo::rustc-link-lib=Xt");
            println!("cargo::rustc-link-lib=Xext");
            println!("cargo::rustc-link-lib=Xfixes");
            println!("cargo::rustc-link-lib=Xau");
            println!("cargo::rustc-link-lib=Xdmcp");
            println!("cargo::rustc-link-lib=Xxf86vm");
            println!("cargo::rustc-link-lib=xcb");
            println!("cargo::rustc-link-lib=xcb-glx");
            println!("cargo::rustc-link-lib=xcb-dri2");
            println!("cargo::rustc-link-lib=xcb-dri3");
            println!("cargo::rustc-link-lib=xcb-present");
            println!("cargo::rustc-link-lib=xcb-sync");
            println!("cargo::rustc-link-lib=xcb-xfixes");
            println!("cargo::rustc-link-lib=xcb-shm");
            println!("cargo::rustc-link-lib=xcb-randr");
            println!("cargo::rustc-link-lib=xshmfence");
            println!("cargo::rustc-link-lib=wayland-client");
            println!("cargo::rustc-link-lib=wayland-server");
            println!("cargo::rustc-link-lib=SM");
            println!("cargo::rustc-link-lib=ICE");
            println!("cargo::rustc-link-lib=expat");
            println!("cargo::rustc-link-lib=ffi");
            println!("cargo::rustc-link-lib=png16");
            println!("cargo::rustc-link-lib=z");
            println!("cargo::rustc-link-lib=drm");
            println!("cargo::rustc-link-lib=gbm");
            println!("cargo::rustc-link-lib=GL");
            println!("cargo::rustc-link-lib=EGL");
            println!("cargo::rustc-link-lib=glapi");
            println!("cargo::rustc-link-lib=GLEW");
            println!("cargo::rustc-link-lib=c++_shared");
        },
        "aarch64-unknown-linux-ohos" => {
            let build_dir = Path::new(&manifest_dir).join("../../build");
            println!("cargo::rerun-if-changed={}/librerun_tools_cpp.so", build_dir.display());
            println!("cargo::rustc-link-search={}", build_dir.display());
            println!("cargo::rustc-link-lib=rerun_tools_cpp");
        },
        _ => panic!("unsupported target {}", target),
    }
}